package com.myjavalab.core;

public class ClassExtendTest {
	public static void main(String[] args) {
		Child child = new Child();
		System.out.printf("子类名称：%s,年龄：%d,包名:%s%n", child.name, child.age,
				child.kind);
		// 输出：子类名称：child,年龄：25,包:javastudy.extendsstudy.child

		// 把child转换成parent对象
		Parent parent = child;

		System.out.printf("转换后的名称:%s,年龄：%d,包名：%s%n", parent.name, parent.age,
				parent.kind);
		// 输出：转换后的名称:Parent,年龄：50,包：javastudy.extendsstudy.parent

		System.out.printf("子类访问父类被隐藏的实例变量name:%s%n", child.getParentName());
		// 输出：子类访问父类被隐藏的实例变量name:Parent

		System.out.printf("子类访问父类被隐藏的静态变量kind:%s", child.getParentKind());
		// 输出：子类访问父类被隐藏的静态变量kind:javastudy.extendsstudy.parent

		child.getName();
		// 输出：child的getName()被调用了

		// **************注意看这个方法，返回的还是子类的getName
		parent.getName();
		// 输出：child的getName()被调用了

		child.getKind();
		// 输出：child的getkind()方法被调用了
		System.out.println(child.getAge());
		parent.getKind();
		// 输出：parent的getKind()方法被调用了

	}
}

class Parent {
	public static String kind = "javastudy.extendsstudy.parent";
	public static int age = 50;
	public String name = "Parent";

	// 静态方法，返回包名
	public static String getKind() {
		System.out.println("parent的getKind()方法被调用了");
		return kind;
	}

	// 静态方法，返回年龄
	public static int getAge() {
		System.out.println("Parent的getAge()方法被调用了");
		return age;
	}

	// 实例方法，返回姓名
	public String getName() {
		System.out.println("Parent的getName()方法被调用了");
		return this.name;
	}

}

class Child extends Parent {
	public static String kind = "javastudy.extendsstudy.child";
	public int age = 25;
	public String name = "child";

	// 隐藏父类静态方法
	public static String getKind() {
		System.out.println("child的getkind()方法被调用了");
		return kind;
	}

	// 获取父类包名
	public static String getParentKind() {
		return Parent.kind;
	}


	// 覆盖父类实例方法
	public String getName() {
		System.out.println("child的getName()被调用了");
		return this.name;
	}

	// 获取父类名称
	public String getParentName() {
		return super.name;
	}
	/*
	 * 错误，实例方法不能覆盖父类的静态方法 public int getAge() { return this.age; }
	 */
	public void give(int i, String s){
		
	}
public void give(String i, int s){
		
	}
}